@qjp88995/provider-client 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/justone/client.d.ts +101 -0
- package/dist/justone/client.d.ts.map +1 -0
- package/dist/justone/client.js +272 -0
- package/dist/justone/client.js.map +1 -0
- package/dist/justone/endpoint-spec.d.ts +49 -0
- package/dist/justone/endpoint-spec.d.ts.map +1 -0
- package/dist/justone/endpoint-spec.js +2 -0
- package/dist/justone/endpoint-spec.js.map +1 -0
- package/dist/justone/endpoints.generated.d.ts +7927 -0
- package/dist/justone/endpoints.generated.d.ts.map +1 -0
- package/dist/justone/endpoints.generated.js +8508 -0
- package/dist/justone/endpoints.generated.js.map +1 -0
- package/dist/justone/errors.d.ts +52 -0
- package/dist/justone/errors.d.ts.map +1 -0
- package/dist/justone/errors.js +73 -0
- package/dist/justone/errors.js.map +1 -0
- package/dist/justone/index.d.ts +8 -0
- package/dist/justone/index.d.ts.map +1 -0
- package/dist/justone/index.js +7 -0
- package/dist/justone/index.js.map +1 -0
- package/dist/justone/params.d.ts +17 -0
- package/dist/justone/params.d.ts.map +1 -0
- package/dist/justone/params.js +72 -0
- package/dist/justone/params.js.map +1 -0
- package/dist/justone/pricing.d.ts +6 -0
- package/dist/justone/pricing.d.ts.map +1 -0
- package/dist/justone/pricing.generated.d.ts +303 -0
- package/dist/justone/pricing.generated.d.ts.map +1 -0
- package/dist/justone/pricing.generated.js +305 -0
- package/dist/justone/pricing.generated.js.map +1 -0
- package/dist/justone/pricing.js +11 -0
- package/dist/justone/pricing.js.map +1 -0
- package/dist/media/bibigpt.adapter.d.ts +43 -0
- package/dist/media/bibigpt.adapter.d.ts.map +1 -0
- package/dist/media/bibigpt.adapter.js +302 -0
- package/dist/media/bibigpt.adapter.js.map +1 -0
- package/dist/media/http.d.ts +21 -0
- package/dist/media/http.d.ts.map +1 -0
- package/dist/media/http.js +39 -0
- package/dist/media/http.js.map +1 -0
- package/dist/media/index.d.ts +44 -0
- package/dist/media/index.d.ts.map +1 -0
- package/dist/media/index.js +47 -0
- package/dist/media/index.js.map +1 -0
- package/dist/media/types.d.ts +207 -0
- package/dist/media/types.d.ts.map +1 -0
- package/dist/media/types.js +21 -0
- package/dist/media/types.js.map +1 -0
- package/dist/media/zhipu-parser-package.d.ts +37 -0
- package/dist/media/zhipu-parser-package.d.ts.map +1 -0
- package/dist/media/zhipu-parser-package.js +108 -0
- package/dist/media/zhipu-parser-package.js.map +1 -0
- package/dist/media/zhipu.adapter.d.ts +37 -0
- package/dist/media/zhipu.adapter.d.ts.map +1 -0
- package/dist/media/zhipu.adapter.js +361 -0
- package/dist/media/zhipu.adapter.js.map +1 -0
- package/dist/provider-client.d.ts +49 -0
- package/dist/provider-client.d.ts.map +1 -1
- package/dist/provider-client.js +129 -0
- package/dist/provider-client.js.map +1 -1
- package/dist/types.d.ts +5 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +10 -2
- package/dist/types.js.map +1 -1
- package/dist/web-search/deepseek.adapter.d.ts +19 -0
- package/dist/web-search/deepseek.adapter.d.ts.map +1 -0
- package/dist/web-search/deepseek.adapter.js +82 -0
- package/dist/web-search/deepseek.adapter.js.map +1 -0
- package/dist/web-search/http.d.ts +28 -0
- package/dist/web-search/http.d.ts.map +1 -0
- package/dist/web-search/http.js +95 -0
- package/dist/web-search/http.js.map +1 -0
- package/dist/web-search/index.d.ts +27 -0
- package/dist/web-search/index.d.ts.map +1 -0
- package/dist/web-search/index.js +36 -0
- package/dist/web-search/index.js.map +1 -0
- package/dist/web-search/minimax.adapter.d.ts +13 -0
- package/dist/web-search/minimax.adapter.d.ts.map +1 -0
- package/dist/web-search/minimax.adapter.js +82 -0
- package/dist/web-search/minimax.adapter.js.map +1 -0
- package/dist/web-search/moonshotai.adapter.d.ts +19 -0
- package/dist/web-search/moonshotai.adapter.d.ts.map +1 -0
- package/dist/web-search/moonshotai.adapter.js +151 -0
- package/dist/web-search/moonshotai.adapter.js.map +1 -0
- package/dist/web-search/types.d.ts +120 -0
- package/dist/web-search/types.d.ts.map +1 -0
- package/dist/web-search/types.js +60 -0
- package/dist/web-search/types.js.map +1 -0
- package/dist/web-search/zhipu.adapter.d.ts +14 -0
- package/dist/web-search/zhipu.adapter.d.ts.map +1 -0
- package/dist/web-search/zhipu.adapter.js +98 -0
- package/dist/web-search/zhipu.adapter.js.map +1 -0
- package/package.json +4 -3
- package/src/index.ts +99 -0
- package/src/justone/client.ts +462 -0
- package/src/justone/endpoint-spec.ts +66 -0
- package/src/justone/endpoints.generated.ts +9258 -0
- package/src/justone/errors.ts +97 -0
- package/src/justone/index.ts +34 -0
- package/src/justone/params.ts +91 -0
- package/src/justone/pricing.generated.ts +308 -0
- package/src/justone/pricing.ts +11 -0
- package/src/media/bibigpt.adapter.ts +372 -0
- package/src/media/http.ts +43 -0
- package/src/media/index.ts +114 -0
- package/src/media/types.ts +233 -0
- package/src/media/zhipu-parser-package.ts +149 -0
- package/src/media/zhipu.adapter.ts +510 -0
- package/src/provider-client.ts +228 -1
- package/src/types.ts +10 -2
- package/src/web-search/deepseek.adapter.ts +149 -0
- package/src/web-search/http.ts +108 -0
- package/src/web-search/index.ts +70 -0
- package/src/web-search/minimax.adapter.ts +148 -0
- package/src/web-search/moonshotai.adapter.ts +228 -0
- package/src/web-search/types.ts +172 -0
- package/src/web-search/zhipu.adapter.ts +184 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
export { type CenterFetchOptions, createCenterFetch } from './center-fetch.js';
|
|
2
2
|
export { type DirectModel, DirectModelResolver, type DirectVendor, } from './direct-resolver.js';
|
|
3
3
|
export { ProtocolUnavailableError, ProviderClientError, type ProviderClientErrorCode, } from './errors.js';
|
|
4
|
+
export { classifyCode, createJustOne, type JustOne, JUSTONE_BASE_URL, JUSTONE_ENDPOINTS, JUSTONE_FAILURE_KINDS, JUSTONE_PRICE_FEN, JUSTONE_PRICING_EXPORTED_AT, JUSTONE_TIMEOUT_MS, type JustOneAttemptRecord, type JustOneCallOptions, type JustOneConnection, type JustOneEndpointKey, type JustOneEndpointSpec, justOneEndpointSpec, type JustOneFailureKind, type JustOneOptions, type JustOneParams, JustOneParamsError, type JustOneParamsOf, type JustOneParamSpec, justOnePriceFen, type JustOneResult, JustOneUpstreamError, type JustOneUpstreamFailureKind, type NormalizedParams, normalizeParams, } from './justone/index.js';
|
|
5
|
+
export { type AudioOutcome, type AudioRequest, BibiGptApiError, BibiGptNetworkError, buildPolishPrompt, type CacheKeyOpts, createMedia, type CreateMediaInput, directMediaConnection, type FileOutcome, type FileRequest, isMediaKind, localizeSummaryHeadings, MEDIA_ADAPTERS, MEDIA_CAPABILITIES, MEDIA_KINDS, type MediaAdapter, type MediaCapability, type MediaConnection, type MediaInput, type MediaKind, type MediaService, type MediaSettings, type MediaSettingsByKind, MediaUpstreamError, pageFromExpertName, type ParsedImage, parseParserPackage, type TokenUsage, type UploadLimitHint, type VideoLinkChapter, type VideoLinkOutcome, type VideoLinkRequest, type VideoLinkSubtitle, ZHIPU_AUDIO_MAX_BYTES, ZHIPU_FILE_TOOL_TYPES, ZHIPU_MIME_TO_EXT, type ZhipuFileToolType, } from './media/index.js';
|
|
4
6
|
export { type ModelFileStore, type ModelHandle, type ModelRef, type ModelResolver, type ResolveOptions, type UploadedFile, } from './model-handle.js';
|
|
5
|
-
export { type FetchForOptions, ProviderClient, type ProviderClientOptions, } from './provider-client.js';
|
|
7
|
+
export { type FetchForOptions, type JustOneClientOptions, type MediaOptions, ProviderClient, type ProviderClientOptions, type WebSearchOptions, } from './provider-client.js';
|
|
6
8
|
export { toProviderClientError } from './to-error.js';
|
|
7
9
|
export { type CatalogEndpoint, type CatalogModel, type CatalogResponse, type CatalogVendor, CENTER_ERROR_CODES, type CenterErrorCode, ENDPOINT_PROTOCOLS, type EndpointProtocol, LLM_CAPABILITIES, LLM_PROTOCOLS, type LlmCapability, type LlmProtocol, type ModelPricing, PC_HEADERS, PROXY_ROUTE_PREFIX, REASONING_EFFORTS, type ReasoningEffort, VENDOR_CATEGORIES, VENDOR_KINDS, type VendorCategory, type VendorKind, } from './types.js';
|
|
8
10
|
export { type AdviceModelView, findVendorAdapter, getVendorAdapter, LlmVendorAdapter, type ModelAdvice, type ProviderOptions, type SamplingParams, VENDOR_ADAPTERS, type VendorFetch, } from './vendors/index.js';
|
|
11
|
+
export { createWebSearch, type CreateWebSearchInput, isWebSearchKind, KIMI_SEARCH_TIERS, type KimiSearchTier, WEB_SEARCH_ADAPTERS, WEB_SEARCH_FILTERS, WEB_SEARCH_KINDS, WEB_SEARCH_RECENCIES, type WebPageOutcome, type WebSearch, type WebSearchAdapter, type WebSearchConnection, type WebSearchFilter, type WebSearchInput, type WebSearchItem, type WebSearchKind, type WebSearchOutcome, type WebSearchRecency, type WebSearchSettings, type WebSearchSettingsByKind, type WebSearchTraits, WebSearchUpstreamError, ZHIPU_SEARCH_ENGINES, type ZhipuSearchEngine, } from './web-search/index.js';
|
|
9
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EACL,KAAK,WAAW,EAChB,mBAAmB,EACnB,KAAK,YAAY,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,KAAK,uBAAuB,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,eAAe,EACpB,cAAc,EACd,KAAK,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
export { createCenterFetch } from './center-fetch.js';
|
|
2
2
|
export { DirectModelResolver, } from './direct-resolver.js';
|
|
3
3
|
export { ProtocolUnavailableError, ProviderClientError, } from './errors.js';
|
|
4
|
+
export { classifyCode, createJustOne, JUSTONE_BASE_URL, JUSTONE_ENDPOINTS, JUSTONE_FAILURE_KINDS, JUSTONE_PRICE_FEN, JUSTONE_PRICING_EXPORTED_AT, JUSTONE_TIMEOUT_MS, justOneEndpointSpec, JustOneParamsError, justOnePriceFen, JustOneUpstreamError, normalizeParams, } from './justone/index.js';
|
|
5
|
+
export { BibiGptApiError, BibiGptNetworkError, buildPolishPrompt, createMedia, directMediaConnection, isMediaKind, localizeSummaryHeadings, MEDIA_ADAPTERS, MEDIA_CAPABILITIES, MEDIA_KINDS, MediaUpstreamError, pageFromExpertName, parseParserPackage, ZHIPU_AUDIO_MAX_BYTES, ZHIPU_FILE_TOOL_TYPES, ZHIPU_MIME_TO_EXT, } from './media/index.js';
|
|
4
6
|
export { ProviderClient, } from './provider-client.js';
|
|
5
7
|
export { toProviderClientError } from './to-error.js';
|
|
6
8
|
export { CENTER_ERROR_CODES, ENDPOINT_PROTOCOLS, LLM_CAPABILITIES, LLM_PROTOCOLS, PC_HEADERS, PROXY_ROUTE_PREFIX, REASONING_EFFORTS, VENDOR_CATEGORIES, VENDOR_KINDS, } from './types.js';
|
|
7
9
|
export { findVendorAdapter, getVendorAdapter, LlmVendorAdapter, VENDOR_ADAPTERS, } from './vendors/index.js';
|
|
10
|
+
export { createWebSearch, isWebSearchKind, KIMI_SEARCH_TIERS, WEB_SEARCH_ADAPTERS, WEB_SEARCH_FILTERS, WEB_SEARCH_KINDS, WEB_SEARCH_RECENCIES, WebSearchUpstreamError, ZHIPU_SEARCH_ENGINES, } from './web-search/index.js';
|
|
8
11
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAEL,mBAAmB,GAEpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,wBAAwB,EACxB,mBAAmB,GAEpB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAEL,mBAAmB,GAEpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,wBAAwB,EACxB,mBAAmB,GAEpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,YAAY,EACZ,aAAa,EAEb,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,2BAA2B,EAC3B,kBAAkB,EAMlB,mBAAmB,EAInB,kBAAkB,EAGlB,eAAe,EAEf,oBAAoB,EAGpB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAGL,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EAEjB,WAAW,EAEX,qBAAqB,EAGrB,WAAW,EACX,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EAClB,WAAW,EASX,kBAAkB,EAClB,kBAAkB,EAElB,kBAAkB,EAOlB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,GAElB,MAAM,kBAAkB,CAAC;AAS1B,OAAO,EAIL,cAAc,GAGf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAKL,kBAAkB,EAElB,kBAAkB,EAElB,gBAAgB,EAChB,aAAa,EAIb,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EAEjB,iBAAiB,EACjB,YAAY,GAGb,MAAM,YAAY,CAAC;AACpB,OAAO,EAEL,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAIhB,eAAe,GAEhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EAEf,eAAe,EACf,iBAAiB,EAEjB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EAcpB,sBAAsB,EACtB,oBAAoB,GAErB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type { VendorFetch } from '../vendors/index.js';
|
|
2
|
+
import type { JustOneEndpointSpec, JustOneParamsOf } from './endpoint-spec.js';
|
|
3
|
+
import { JUSTONE_ENDPOINTS } from './endpoints.generated.js';
|
|
4
|
+
import { type JustOneFailureKind } from './errors.js';
|
|
5
|
+
export declare const JUSTONE_BASE_URL = "https://api.justoneapi.com";
|
|
6
|
+
/** 官方建议 120 秒:服务端是现场去平台采集的,60 秒以下会有一部分请求等不到结果。 */
|
|
7
|
+
export declare const JUSTONE_TIMEOUT_MS = 120000;
|
|
8
|
+
export type JustOneEndpointKey = keyof typeof JUSTONE_ENDPOINTS;
|
|
9
|
+
/** 接口 `K` 的入参类型(必填 / 可选 / 枚举都按登记表收窄)。 */
|
|
10
|
+
export type JustOneParams<K extends JustOneEndpointKey> = JustOneParamsOf<(typeof JUSTONE_ENDPOINTS)[K]>;
|
|
11
|
+
/**
|
|
12
|
+
* 出站方式。中心模式(`ProviderClient.justOne`)不给 `token`:fetch 是中心模式 fetch,中心按厂商描述把 key 注入
|
|
13
|
+
* query 或表单字段 `token`。直连(本地开发、测试)给明文 token,用完即弃,不进记录、不进错误信息。
|
|
14
|
+
*/
|
|
15
|
+
export interface JustOneConnection {
|
|
16
|
+
/** 缺省 `JUSTONE_BASE_URL`。 */
|
|
17
|
+
baseUrl?: string;
|
|
18
|
+
token?: string;
|
|
19
|
+
/** 缺省全局 fetch。 */
|
|
20
|
+
fetch?: VendorFetch;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 一次真正发出去的请求(重试各一条、调用方中途取消也一条——都可能扣费)。参数核对没过、根本没发出去的不报;
|
|
24
|
+
* 中心自己拦下的(没有可用 key、不许用这家……)也不报,那些请求没到 JustOne。
|
|
25
|
+
*/
|
|
26
|
+
export interface JustOneAttemptRecord<C = unknown> {
|
|
27
|
+
endpoint: string;
|
|
28
|
+
/** 核对后线上的参数(不含 token)。 */
|
|
29
|
+
params: Record<string, string>;
|
|
30
|
+
attempt: number;
|
|
31
|
+
ok: boolean;
|
|
32
|
+
failureKind?: JustOneFailureKind;
|
|
33
|
+
code: number | null;
|
|
34
|
+
httpStatus: number | null;
|
|
35
|
+
requestId: string | null;
|
|
36
|
+
error?: string;
|
|
37
|
+
elapsedMs: number;
|
|
38
|
+
/** 原始返回体(已抹掉 token);没拿到返回体(连接失败、超时、取消)就没有。 */
|
|
39
|
+
response?: string;
|
|
40
|
+
/** 中心模式下实际用的那把 key(`x-pc-credential`);直连或没拿到响应是 null。 */
|
|
41
|
+
credential: string | null;
|
|
42
|
+
/** 定价表里的单价(分),null = 价格未知。 */
|
|
43
|
+
unitPriceFen: number | null;
|
|
44
|
+
/** 调用方给的 `JustOneCallOptions.context`,原样带回。 */
|
|
45
|
+
context: C | undefined;
|
|
46
|
+
}
|
|
47
|
+
export interface JustOneOptions<C = unknown> {
|
|
48
|
+
connection: JustOneConnection;
|
|
49
|
+
/**
|
|
50
|
+
* 每一次真正发出去的请求都调它(调用审计、花费由 APP 记)。放在这里而不是每次调用传,记录就不会被哪个调用方漏掉。
|
|
51
|
+
* 会被 await;**它不该抛**——走到这里时请求已经发出去了(成功的那次已经扣了费),让调用因记录失败而失败,
|
|
52
|
+
* 调用方会以为没调成、再调一次、再扣一次费。抛了的话客户端用 `console.error` 报出来,调用照常继续。
|
|
53
|
+
*/
|
|
54
|
+
onAttempt?: (record: JustOneAttemptRecord<C>) => void | Promise<void>;
|
|
55
|
+
}
|
|
56
|
+
export interface JustOneCallOptions<C = unknown> {
|
|
57
|
+
/** 谁在调、在哪条对话里;原样进 `onAttempt` 的记录。 */
|
|
58
|
+
context?: C;
|
|
59
|
+
/** 调用方的取消信号(工具超时、用户停止)。取消时原样抛出它的 reason,不包成域错误。 */
|
|
60
|
+
signal?: AbortSignal;
|
|
61
|
+
/** 单次尝试的超时,缺省 `JUSTONE_TIMEOUT_MS`。 */
|
|
62
|
+
timeoutMs?: number;
|
|
63
|
+
/**
|
|
64
|
+
* 可重试的失败(`JustOneUpstreamError.retryable`)再试几次,缺省 1。
|
|
65
|
+
* 不确定失败的调用扣不扣费,要省钱的调用方传 0。
|
|
66
|
+
*/
|
|
67
|
+
retries?: number;
|
|
68
|
+
}
|
|
69
|
+
export interface JustOneResult {
|
|
70
|
+
endpoint: string;
|
|
71
|
+
/** 信封里的 `data`。官方没有给出 schema,形状由调用方自己收窄。 */
|
|
72
|
+
data: unknown;
|
|
73
|
+
message: string | null;
|
|
74
|
+
requestId: string | null;
|
|
75
|
+
/** 服务端记录的采集时间(命中缓存的接口据此看数据新旧)。 */
|
|
76
|
+
recordTime: string | null;
|
|
77
|
+
/** 成功那一次的耗时。 */
|
|
78
|
+
elapsedMs: number;
|
|
79
|
+
/** 一共试了几次(含首次)。 */
|
|
80
|
+
attempts: number;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* JustOne(`docs.justoneapi.com`)的调用客户端,连接已绑好。接口与参数来自生成的登记表 `JUSTONE_ENDPOINTS`:
|
|
84
|
+
*
|
|
85
|
+
* - 参数在发出前按登记表核对(`normalizeParams`),不对就抛 `JustOneParamsError`,不花钱;
|
|
86
|
+
* - token(直连时)按接口声明放进 query 或表单请求体;
|
|
87
|
+
* - 成败看信封里的 `code`(0 = 成功),**不看 HTTP 状态码**——失败时两者都会给,但只有业务码分得清是余额不足还是采集失败;
|
|
88
|
+
* - 可重试的失败(采集失败 301、服务端 500 / 503、连接失败、中心连不上 JustOne)默认再试一次,超时不重试;
|
|
89
|
+
* - 中心自己报的错(没有可用 key……)抛 `ProviderClientError`,不重试、不记录。
|
|
90
|
+
*/
|
|
91
|
+
export interface JustOne<C = unknown> {
|
|
92
|
+
/** 类型化调用:业务代码用这个,接口名与参数在编译期就核对。 */
|
|
93
|
+
call<K extends JustOneEndpointKey>(endpoint: K, params: JustOneParams<K>, opts?: JustOneCallOptions<C>): Promise<JustOneResult>;
|
|
94
|
+
/** 接口名与参数在运行期才知道(例如模型选的)。核对规则同 `call`,错误在运行期以 `JustOneParamsError` 报出来。 */
|
|
95
|
+
callDynamic(endpoint: string, params: Readonly<Record<string, unknown>>, opts?: JustOneCallOptions<C>): Promise<JustOneResult>;
|
|
96
|
+
}
|
|
97
|
+
/** 绑好连接的 JustOne 客户端。中心模式用 `ProviderClient.justOne`;这里是直连与中心模式共用的底层。 */
|
|
98
|
+
export declare function createJustOne<C = unknown>(options: JustOneOptions<C>): JustOne<C>;
|
|
99
|
+
/** 按键查登记表;不在表里返回 undefined(`hasOwn` 不走原型链上的同名属性)。 */
|
|
100
|
+
export declare function justOneEndpointSpec(key: string): JustOneEndpointSpec | undefined;
|
|
101
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/justone/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { parseCenterError, ProviderClientError } from '../errors.js';
|
|
2
|
+
import { PC_HEADERS } from '../types.js';
|
|
3
|
+
import { JUSTONE_ENDPOINTS } from './endpoints.generated.js';
|
|
4
|
+
import { classifyCode, JustOneParamsError, JustOneUpstreamError, } from './errors.js';
|
|
5
|
+
import { normalizeParams } from './params.js';
|
|
6
|
+
import { justOnePriceFen } from './pricing.js';
|
|
7
|
+
export const JUSTONE_BASE_URL = 'https://api.justoneapi.com';
|
|
8
|
+
/** 官方建议 120 秒:服务端是现场去平台采集的,60 秒以下会有一部分请求等不到结果。 */
|
|
9
|
+
export const JUSTONE_TIMEOUT_MS = 120_000;
|
|
10
|
+
/** 两次尝试之间的间隔。 */
|
|
11
|
+
const RETRY_DELAY_MS = 1_000;
|
|
12
|
+
/** 绑好连接的 JustOne 客户端。中心模式用 `ProviderClient.justOne`;这里是直连与中心模式共用的底层。 */
|
|
13
|
+
export function createJustOne(options) {
|
|
14
|
+
const conn = options.connection;
|
|
15
|
+
const base = (conn.baseUrl ?? JUSTONE_BASE_URL).replace(/\/+$/, '');
|
|
16
|
+
const doFetch = conn.fetch ?? globalThis.fetch;
|
|
17
|
+
const record = async (r) => {
|
|
18
|
+
if (!options.onAttempt)
|
|
19
|
+
return;
|
|
20
|
+
try {
|
|
21
|
+
await options.onAttempt(r);
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
console.error(`[provider-client] JustOne onAttempt threw (${r.endpoint}, attempt ${r.attempt}): ${String(err)}`);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
const attempt = async (spec, values, opts) => {
|
|
28
|
+
const fields = new URLSearchParams(conn.token ? { ...values, token: conn.token } : values);
|
|
29
|
+
const query = fields.toString();
|
|
30
|
+
const url = spec.paramsIn === 'query' && query
|
|
31
|
+
? `${base}${spec.path}?${query}`
|
|
32
|
+
: `${base}${spec.path}`;
|
|
33
|
+
const timeout = AbortSignal.timeout(opts.timeoutMs ?? JUSTONE_TIMEOUT_MS);
|
|
34
|
+
const signal = opts.signal
|
|
35
|
+
? AbortSignal.any([opts.signal, timeout])
|
|
36
|
+
: timeout;
|
|
37
|
+
const started = Date.now();
|
|
38
|
+
let res;
|
|
39
|
+
let text;
|
|
40
|
+
try {
|
|
41
|
+
res = await doFetch(url, {
|
|
42
|
+
method: spec.method,
|
|
43
|
+
headers: { accept: 'application/json' },
|
|
44
|
+
...(spec.paramsIn === 'form' ? { body: fields } : {}),
|
|
45
|
+
signal,
|
|
46
|
+
});
|
|
47
|
+
text = await res.text();
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
const failure = {
|
|
51
|
+
code: null,
|
|
52
|
+
httpStatus: null,
|
|
53
|
+
requestId: null,
|
|
54
|
+
credential: null,
|
|
55
|
+
elapsedMs: Date.now() - started,
|
|
56
|
+
};
|
|
57
|
+
// 请求可能已经到了对方那里(可能扣了费),所以取消也要记一行;由调用循环记完再抛。
|
|
58
|
+
if (opts.signal?.aborted) {
|
|
59
|
+
return {
|
|
60
|
+
ok: false,
|
|
61
|
+
kind: 'aborted',
|
|
62
|
+
reason: '调用方取消了这次请求',
|
|
63
|
+
retryable: false,
|
|
64
|
+
...failure,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
if (timeout.aborted) {
|
|
68
|
+
return {
|
|
69
|
+
ok: false,
|
|
70
|
+
kind: 'timeout',
|
|
71
|
+
reason: `等了 ${Math.round((Date.now() - started) / 1000)} 秒没有返回`,
|
|
72
|
+
retryable: false,
|
|
73
|
+
...failure,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
// 只取错误类名与 cause 的 code(`UND_ERR_SOCKET` 之类):直连时 GET 的 token 就在 URL 里。
|
|
77
|
+
return {
|
|
78
|
+
ok: false,
|
|
79
|
+
kind: 'network',
|
|
80
|
+
reason: `连接失败(${describeNetworkError(err)})`,
|
|
81
|
+
retryable: true,
|
|
82
|
+
...failure,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const elapsedMs = Date.now() - started;
|
|
86
|
+
const credential = res.headers.get(PC_HEADERS.credential);
|
|
87
|
+
const httpStatus = res.status;
|
|
88
|
+
// 中心自己的错误体(`{ code: '<字符串>', message }`,没有 `x-pc-credential`):请求没到 JustOne。
|
|
89
|
+
if (!res.ok && !credential) {
|
|
90
|
+
const center = centerError(text);
|
|
91
|
+
if (center?.code === 'upstream_error') {
|
|
92
|
+
return {
|
|
93
|
+
ok: false,
|
|
94
|
+
kind: 'network',
|
|
95
|
+
reason: `中心连不上 JustOne(${center.message})`,
|
|
96
|
+
code: null,
|
|
97
|
+
httpStatus,
|
|
98
|
+
requestId: null,
|
|
99
|
+
retryable: true,
|
|
100
|
+
elapsedMs,
|
|
101
|
+
credential: null,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
if (center) {
|
|
105
|
+
throw new ProviderClientError(center.code, center.message, httpStatus);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// 对方的报错里万一回显了 token:先抹掉再往下走,于是记录里的返回体、错误信息都从这份抹过的文本来。
|
|
109
|
+
const response = conn.token ? text.split(conn.token).join('***') : text;
|
|
110
|
+
let body;
|
|
111
|
+
try {
|
|
112
|
+
body = JSON.parse(response);
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return invalidResponse(httpStatus, `不是 JSON:${response.slice(0, 120)}`, elapsedMs, response, credential);
|
|
116
|
+
}
|
|
117
|
+
if (!isEnvelope(body)) {
|
|
118
|
+
return invalidResponse(httpStatus, 'JSON 里没有数字型的 code', elapsedMs, response, credential);
|
|
119
|
+
}
|
|
120
|
+
const requestId = typeof body.requestId === 'string' ? body.requestId : null;
|
|
121
|
+
const message = typeof body.message === 'string' ? body.message : null;
|
|
122
|
+
if (body.code !== 0) {
|
|
123
|
+
return {
|
|
124
|
+
ok: false,
|
|
125
|
+
...classifyCode(body.code, message),
|
|
126
|
+
code: body.code,
|
|
127
|
+
httpStatus,
|
|
128
|
+
requestId,
|
|
129
|
+
elapsedMs,
|
|
130
|
+
response,
|
|
131
|
+
credential,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
ok: true,
|
|
136
|
+
response,
|
|
137
|
+
credential,
|
|
138
|
+
result: {
|
|
139
|
+
data: body.data ?? null,
|
|
140
|
+
message,
|
|
141
|
+
requestId,
|
|
142
|
+
recordTime: typeof body.recordTime === 'string' ? body.recordTime : null,
|
|
143
|
+
elapsedMs,
|
|
144
|
+
httpStatus,
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
const callDynamic = async (endpoint, params, opts = {}) => {
|
|
149
|
+
const spec = justOneEndpointSpec(endpoint);
|
|
150
|
+
if (!spec) {
|
|
151
|
+
throw new JustOneParamsError(endpoint, ['登记表里没有这个接口']);
|
|
152
|
+
}
|
|
153
|
+
const normalized = normalizeParams(spec, params);
|
|
154
|
+
if (!normalized.ok) {
|
|
155
|
+
throw new JustOneParamsError(endpoint, normalized.problems);
|
|
156
|
+
}
|
|
157
|
+
const retries = Math.max(0, opts.retries ?? 1);
|
|
158
|
+
const unitPriceFen = justOnePriceFen(endpoint);
|
|
159
|
+
for (let n = 1;; n++) {
|
|
160
|
+
opts.signal?.throwIfAborted();
|
|
161
|
+
const out = await attempt(spec, normalized.values, opts);
|
|
162
|
+
await record({
|
|
163
|
+
endpoint,
|
|
164
|
+
params: normalized.values,
|
|
165
|
+
attempt: n,
|
|
166
|
+
response: out.response,
|
|
167
|
+
credential: out.credential,
|
|
168
|
+
unitPriceFen,
|
|
169
|
+
context: opts.context,
|
|
170
|
+
...(out.ok
|
|
171
|
+
? {
|
|
172
|
+
ok: true,
|
|
173
|
+
code: 0,
|
|
174
|
+
httpStatus: out.result.httpStatus,
|
|
175
|
+
requestId: out.result.requestId,
|
|
176
|
+
elapsedMs: out.result.elapsedMs,
|
|
177
|
+
}
|
|
178
|
+
: {
|
|
179
|
+
ok: false,
|
|
180
|
+
failureKind: out.kind,
|
|
181
|
+
code: out.code,
|
|
182
|
+
httpStatus: out.httpStatus,
|
|
183
|
+
requestId: out.requestId,
|
|
184
|
+
error: out.reason,
|
|
185
|
+
elapsedMs: out.elapsedMs,
|
|
186
|
+
}),
|
|
187
|
+
});
|
|
188
|
+
if (out.ok) {
|
|
189
|
+
const { httpStatus: _http, ...result } = out.result;
|
|
190
|
+
return { endpoint, ...result, attempts: n };
|
|
191
|
+
}
|
|
192
|
+
if (out.kind === 'aborted') {
|
|
193
|
+
// 只有调用方的信号已中止时 attempt 才给 aborted:原样抛出取消原因。
|
|
194
|
+
opts.signal?.throwIfAborted();
|
|
195
|
+
throw new Error('JustOne attempt reported aborted without a signal');
|
|
196
|
+
}
|
|
197
|
+
if (!out.retryable || n > retries) {
|
|
198
|
+
throw new JustOneUpstreamError(endpoint, out.kind, out.reason, {
|
|
199
|
+
code: out.code,
|
|
200
|
+
httpStatus: out.httpStatus,
|
|
201
|
+
requestId: out.requestId,
|
|
202
|
+
retryable: out.retryable,
|
|
203
|
+
attempts: n,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
await sleep(RETRY_DELAY_MS, opts.signal);
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
return {
|
|
210
|
+
call: (endpoint, params, opts) => callDynamic(endpoint, params, opts),
|
|
211
|
+
callDynamic,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
/** 按键查登记表;不在表里返回 undefined(`hasOwn` 不走原型链上的同名属性)。 */
|
|
215
|
+
export function justOneEndpointSpec(key) {
|
|
216
|
+
return Object.hasOwn(JUSTONE_ENDPOINTS, key)
|
|
217
|
+
? JUSTONE_ENDPOINTS[key]
|
|
218
|
+
: undefined;
|
|
219
|
+
}
|
|
220
|
+
function centerError(text) {
|
|
221
|
+
try {
|
|
222
|
+
return parseCenterError(JSON.parse(text));
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
function isEnvelope(v) {
|
|
229
|
+
return (typeof v === 'object' &&
|
|
230
|
+
v !== null &&
|
|
231
|
+
typeof v.code === 'number');
|
|
232
|
+
}
|
|
233
|
+
function invalidResponse(httpStatus, what, elapsedMs, response, credential) {
|
|
234
|
+
return {
|
|
235
|
+
ok: false,
|
|
236
|
+
kind: 'invalid-response',
|
|
237
|
+
reason: `HTTP ${httpStatus},响应${what}`,
|
|
238
|
+
code: null,
|
|
239
|
+
httpStatus,
|
|
240
|
+
requestId: null,
|
|
241
|
+
// 网关层的 5xx(还没到 JustOne 的业务层)值得再试一次。
|
|
242
|
+
retryable: httpStatus >= 500,
|
|
243
|
+
elapsedMs,
|
|
244
|
+
response,
|
|
245
|
+
credential,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
function describeNetworkError(err) {
|
|
249
|
+
if (!(err instanceof Error))
|
|
250
|
+
return 'unknown';
|
|
251
|
+
const cause = err.cause;
|
|
252
|
+
return typeof cause?.code === 'string'
|
|
253
|
+
? `${err.name} ${cause.code}`
|
|
254
|
+
: err.name;
|
|
255
|
+
}
|
|
256
|
+
/** 可被调用方取消的等待:取消时原样抛出信号的 reason。 */
|
|
257
|
+
function sleep(ms, signal) {
|
|
258
|
+
return new Promise((resolve, reject) => {
|
|
259
|
+
if (signal?.aborted)
|
|
260
|
+
return reject(signal.reason);
|
|
261
|
+
const timer = setTimeout(() => {
|
|
262
|
+
signal?.removeEventListener('abort', onAbort);
|
|
263
|
+
resolve();
|
|
264
|
+
}, ms);
|
|
265
|
+
const onAbort = () => {
|
|
266
|
+
clearTimeout(timer);
|
|
267
|
+
reject(signal?.reason);
|
|
268
|
+
};
|
|
269
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/justone/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 登记表里一个接口的形状(`justone-endpoints.generated.ts` 由脚本从官方 OpenAPI
|
|
3
|
+
* 生成,见 `packages/client/scripts/generate-justone-endpoints.mjs`)。
|
|
4
|
+
*
|
|
5
|
+
* 文字(`title` / `description` / `notes` / 参数说明)都是官方中文文档的原文,
|
|
6
|
+
* 将来给模型看的工具说明可以直接取用,不必再抄一遍。
|
|
7
|
+
*/
|
|
8
|
+
export interface JustOneEndpointSpec {
|
|
9
|
+
method: 'GET' | 'POST';
|
|
10
|
+
path: string;
|
|
11
|
+
/**
|
|
12
|
+
* 参数与 token 放哪:`query` 或 `form`(`application/x-www-form-urlencoded`
|
|
13
|
+
* 请求体)。不能按方法推断——官方有几个 POST 接口没有请求体、参数全在 query。
|
|
14
|
+
*/
|
|
15
|
+
paramsIn: 'query' | 'form';
|
|
16
|
+
/** 官方分类(中文 tag),如「小红书」「抖音巨量星图」。 */
|
|
17
|
+
platform: string;
|
|
18
|
+
/** 如「笔记详情 (V1)」。 */
|
|
19
|
+
title: string;
|
|
20
|
+
description: string;
|
|
21
|
+
docsUrl: string;
|
|
22
|
+
deprecated?: boolean;
|
|
23
|
+
/** 官方在同一能力的多个版本里推荐的那个。 */
|
|
24
|
+
recommended?: boolean;
|
|
25
|
+
/** 官方标注的限制与用法提示(「此版本不支持视频下载」……)。 */
|
|
26
|
+
notes?: readonly string[];
|
|
27
|
+
/** 不含 `token`——它由客户端统一放。 */
|
|
28
|
+
params: Readonly<Record<string, JustOneParamSpec>>;
|
|
29
|
+
}
|
|
30
|
+
export interface JustOneParamSpec {
|
|
31
|
+
type: 'string' | 'integer' | 'number' | 'boolean';
|
|
32
|
+
required: boolean;
|
|
33
|
+
enum?: readonly string[];
|
|
34
|
+
default?: string | number | boolean;
|
|
35
|
+
description?: string;
|
|
36
|
+
}
|
|
37
|
+
/** 单个参数的 TS 值类型:有枚举就收窄成字面量。 */
|
|
38
|
+
type ParamValue<P extends JustOneParamSpec> = P['enum'] extends readonly (infer E)[] ? E : P['type'] extends 'integer' | 'number' ? number : P['type'] extends 'boolean' ? boolean : string;
|
|
39
|
+
type Simplify<T> = {
|
|
40
|
+
[K in keyof T]: T[K];
|
|
41
|
+
} & {};
|
|
42
|
+
/** 一个接口的入参类型:必填的必填、可选的可选,名字与取值都按登记表收窄。 */
|
|
43
|
+
export type JustOneParamsOf<S extends JustOneEndpointSpec> = Simplify<{
|
|
44
|
+
-readonly [K in keyof S['params'] as S['params'][K]['required'] extends true ? K : never]: ParamValue<S['params'][K]>;
|
|
45
|
+
} & {
|
|
46
|
+
-readonly [K in keyof S['params'] as S['params'][K]['required'] extends true ? never : K]?: ParamValue<S['params'][K]>;
|
|
47
|
+
}>;
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=endpoint-spec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-spec.d.ts","sourceRoot":"","sources":["../../src/justone/endpoint-spec.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oCAAoC;IACpC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,4BAA4B;IAC5B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAClD,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,+BAA+B;AAC/B,KAAK,UAAU,CAAC,CAAC,SAAS,gBAAgB,IACxC,CAAC,CAAC,MAAM,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAClC,CAAC,GACD,CAAC,CAAC,MAAM,CAAC,SAAS,SAAS,GAAG,QAAQ,GACpC,MAAM,GACN,CAAC,CAAC,MAAM,CAAC,SAAS,SAAS,GACzB,OAAO,GACP,MAAM,CAAC;AAEjB,KAAK,QAAQ,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,EAAE,CAAC;AAEjD,0CAA0C;AAC1C,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,mBAAmB,IAAI,QAAQ,CACnE;IACE,CAAC,UACC,CAAC,IAAI,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,IAAI,GAC7D,CAAC,GACD,KAAK,GACR,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9B,GAAG;IACF,CAAC,UACC,CAAC,IAAI,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,IAAI,GAC7D,KAAK,GACL,CAAC,CACN,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/B,CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-spec.js","sourceRoot":"","sources":["../../src/justone/endpoint-spec.ts"],"names":[],"mappings":""}
|